#include <gtk/gtk.h>

/*
* Hash codes for class names created using String.hashCode(). Used here for as swicth/case numbers.
*/
#define GtkWidget_ID    -408278814
#define GtkContainer_ID    327913763
#define GtkBin_ID    2143052585
#define GtkWindow_ID    -407983474
#define GtkDialog_ID    -952316954
#define GtkAboutDialog_ID    2000163671
#define GtkColorSelectionDialog_ID    788879919
#define GtkFileChooserDialog_ID    -688282391
#define GtkFileSelection_ID    1357130514
#define GtkFontSelectionDialog_ID    1750206407
#define GtkInputDialog_ID    638805460
#define GtkMessageDialog_ID    1730718673
#define GtkPageSetupUnixDialog_ID    -1245265184
#define GtkPrintUnixDialog_ID    1333729951
#define GtkRecentChooserDialog_ID    247584234
#define GtkAssistant_ID    -2126268544
#define GtkPlug_ID    2010540972
#define GtkAlignment_ID    -1788221819
#define GtkFrame_ID    -2106814705
#define GtkAspectFrame_ID    -1828503529
#define GtkButton_ID    -997919280
#define GtkToggleButton_ID    616685508
#define GtkCheckButton_ID    1667806844
#define GtkRadioButton_ID    493396783
#define GtkColorButton_ID    1881378967
#define GtkFontButton_ID    109623295
#define GtkLinkButton_ID    1787735914
#define GtkOptionMenu_ID    -1491460334
#define GtkScaleButton_ID    79175998
#define GtkVolumeButton_ID    2100535050
#define GtkItem_ID    2010339633
#define GtkMenuItem_ID    -718808016
#define GtkCheckMenuItem_ID    1243488732
#define GtkRadioMenuItem_ID    -2083148337
#define GtkImageMenuItem_ID    195093295
#define GtkSeparatorMenuItem_ID    220942777
#define GtkTearoffMenuItem_ID    -1775239391
#define GtkListItem_ID    1230618607
#define GtkTreeItem_ID    1271137007
#define GtkComboBox_ID    -727031685
#define GtkComboBoxEntry_ID    750111927
#define GtkEventBox_ID    163378159
#define GtkExpander_ID    -2053813275
#define GtkHandleBox_ID    802966309
#define GtkToolItem_ID    -1098617879
#define GtkToolButton_ID    591149704
#define GtkMenuToolButton_ID    -855883193
#define GtkToggleToolButton_ID    -431289732
#define GtkRadioToolButton_ID    -574873497
#define GtkSeparatorToolItem_ID    -158867086
#define GtkScrolledWindow_ID    1943321562
#define GtkViewport_ID    1081972676
#define GtkBox_ID    2143052781
#define GtkButtonBox_ID    750419419
#define GtkHButtonBox_ID    188128591
#define GtkVButtonBox_ID    1731906817
#define GtkVBox_ID    2010679187
#define GtkColorSelection_ID    1405112839
#define GtkFileChooserWidget_ID    -144244251
#define GtkFontSelection_ID    -115011169
#define GtkGammaCurve_ID    923622694
#define GtkRecentChooserWidget_ID    791622374
#define GtkHBox_ID    2010262113
#define GtkCombo_ID    -2109663440
#define GtkFileChooserButton_ID    -733884717
#define GtkStatusbar_ID    -1331326077
#define GtkCList_ID    -2110709437
#define GtkCTree_ID    -2110462909
#define GtkFixed_ID    -2107060970
#define GtkPaned_ID    -2098073698
#define GtkHPaned_ID    -860886766
#define GtkVPaned_ID    -460078652
#define GtkIconView_ID    -852580900
#define GtkLayout_ID    -729953848
#define GtkList_ID    2010418876
#define GtkMenuShell_ID    -799334221
#define GtkMenuBar_ID    -161741994
#define GtkMenu_ID    2010444669
#define GtkRecentChooserMenu_ID    1113370241
#define GtkNotebook_ID    1466843385
#define GtkSocket_ID    -517280239
#define GtkTable_ID    -2094390928
#define GtkTextView_ID    -1118292848
#define GtkToolbar_ID    2042794141
#define GtkTree_ID    2010665404
#define GtkTreeView_ID    1271513729
#define GtkMisc_ID    2010448650
#define GtkLabel_ID    -2101779306
#define GtkAccelLabel_ID    52086410
#define GtkTipsQuery_ID    -469017326
#define GtkArrow_ID    -2111415893
#define GtkImage_ID    -2104193283
#define GtkPixmap_ID    -608081413
#define GtkCalendar_ID    -293037476
#define GtkCellView_ID    -1032235451
#define GtkDrawingArea_ID    807263725
#define GtkCairoDrawable_ID    -67958872
#define GtkCurve_ID    -2109479279
#define GtkEntry_ID    -2107838956
#define GtkSpinButton_ID    -1111711310
#define GtkRuler_ID    -2095632744
#define GtkHRuler_ID    -858445812
#define GtkVRuler_ID    -457637698
#define GtkRange_ID    -2096226593
#define GtkScale_ID    -2095255828
#define GtkHScale_ID    -858068896
#define GtkVScale_ID    -457260782
#define GtkScrollbar_ID    1156664008
#define GtkHScrollbar_ID    594373180
#define GtkVScrollbar_ID    2138151406
#define GtkSeparator_ID    -1823266937
#define GtkHSeparator_ID    1909409531
#define GtkVSeparator_ID    -841779539
#define GtkInvisible_ID    -1162935217
#define GtkOldEditable_ID    1053396429
#define GtkText_ID    2010653515
#define GtkPreview_ID    -1430263574
#define GtkProgress_ID    -1115791029
#define GtkProgressBar_ID    -1778574648
#define GtkAdjustment_ID    -887735029
#define GtkCellRenderer_ID    957123683
#define GtkCellRendererText_ID    -1920902096
#define GtkCellRendererAccel_ID    563950149
#define GtkCellRendererCombo_ID    566164203
#define GtkCellRendererSpin_ID    -1920921787
#define GtkCellRendererPixbuf_ID    738186935
#define GtkCellRendererProgress_ID    -127492176
#define GtkCellRendererToggle_ID    857742743
#define GtkFileFilter_ID    -1445662798
#define GtkItemFactory_ID    -240916839
#define GtkTooltips_ID    -1097347090
#define GtkTreeViewColumn_ID    714595639
#define GtkRecentFilter_ID    975662545
#define GtkAccelGroup_ID    47988245
#define GtkAccelMap_ID    2033572466
#define AtkObject_ID    1611192279
#define GtkAccessible_ID    288746324
#define GtkAction_ID    -1043182380
#define GtkToggleAction_ID    571422408
#define GtkRadioAction_ID    448133683
#define GtkRecentAction_ID    827203727
#define GtkActionGroup_ID    -1348559349
#define GtkBuilder_ID    -881134403
#define GtkClipboard_ID    -861527496
#define GtkEntryCompletion_ID    -705092336
#define GtkIconFactory_ID    -347019661
#define GtkIconTheme_ID    -662081166
#define GtkIMContext_ID    -691660627
#define GtkIMContextSimple_ID    319242431
#define GtkIMMulticontext_ID    -1198061032
#define GtkListStore_ID    -496283771
#define GtkPageSetup_ID    1611230672
#define GtkPrinter_ID    -1426797252
#define GtkPrintContext_ID    1073221216
#define GtkPrintJob_ID    -1281067794
#define GtkPrintOperation_ID    -1652013608
#define GtkPrintSettings_ID    912062866
#define GtkRcStyle_ID    -101360862
#define GtkRecentManager_ID    1870575732
#define GtkSettings_ID    1319918401
#define GtkSizeGroup_ID    1213416352
#define GtkStatusIcon_ID    1677821737
#define GtkStyle_ID    -2094726317
#define GtkTextBuffer_ID    -1499086997
#define GtkTextChildAnchor_ID    866612902
#define GtkTextMark_ID    -1118568264
#define GtkTextTag_ID    1765039183
#define GtkTextTagTable_ID    -1061074753
#define GtkTreeModelFilter_ID    -156034907
#define GtkTreeModelSort_ID    2105256459
#define GtkTreeSelection_ID    -1895009488
#define GtkTreeStore_ID    759786629
#define GtkUIManager_ID    596144955
#define GtkWindowGroup_ID    -1017527151
#define GtkTooltip_ID    2042811685
#define GtkHSeparator_ID   1909409531

/* GObject types, values hard coded in GObject.java */
#define GO_UNDEFINED   0
#define GO_GtkTreeViewColumn   1
#define GO_GtkListStore   2
#define GO_CtkCellRenderer  3
#define GO_GtkTreeSelection  4
#define GO_GdkPixBuf   5
#define GO_GtkCellRendererText  6
#define GO_GtkCellRendererToggle  7
#define GO_GtkCellRendererStockImage  8
#define GO_GtkCellRendererProgress  9
#define GO_GtkCellRendererPixbuf  10
#define GO_GtkAdjustment 11

/* GTypes on java side, values hard coded in GType.java */
#define G_TYPE_INVALID_JAVA 0
#define G_TYPE_NONE_JAVA  1
#define G_TYPE_INTERFACE_JAVA  2
#define G_TYPE_CHAR_JAVA  3
#define G_TYPE_UCHAR_JAVA   4
#define G_TYPE_BOOLEAN_JAVA  5
#define G_TYPE_INT_JAVA   6
#define G_TYPE_UINT_JAVA   7
#define G_TYPE_LONG_JAVA   8
#define G_TYPE_ULONG_JAVA   9
#define G_TYPE_INT64_JAVA   10
#define G_TYPE_UINT64_JAVA   11
#define G_TYPE_ENUM_JAVA   12
#define G_TYPE_FLAGS_JAVA   13
#define G_TYPE_FLOAT_JAVA   14
#define G_TYPE_DOUBLE_JAVA   15
#define G_TYPE_STRING_JAVA   16
#define G_TYPE_POINTER_JAVA   17
#define G_TYPE_BOXED_JAVA   18
#define G_TYPE_PARAM_JAVA   19
#define G_TYPE_OBJECT_JAVA   20
#define G_TYPE_GTYPE_JAVA   21
#define GDK_TYPE_PIXBUF_JAVA 22

/*
* init and helper methods
*/
void 			init_bank			();
gpointer		int_key 			(int key_val);
/*
* widget methods
*/
void 			create_widget 			(const char *type, const char *name, int hash, gpointer data);
GtkWidget* 		get_widget 			(const char *widget_name);
void			destroy_widget_from_bank	(const char *widget_name);
void			insert_widget 			(GtkWidget *widget, const char *widget_name);
/*
*GObject methods
*/
void 			create_new_g_object 		(int type, int id, gpointer data);
void			destroy_g_object		(int id);
GObject*		get_g_object 			(int id);
